/**
 * @author: 最帅的的乐乐
 * @date: 2024/4/30 16:00
 * @motto the harder, the luckier。
 *
 * 给你一个整数，将其转为罗马数字
 *
 * 初始值： 在代码的开头，我们定义了一个字符串 rome，里面包含了罗马数字字符。然后，我们定义了一个指针 p，初始值为 0。
 *
 * 指针的作用： 指针 p 的作用是指示在字符串 rome 中当前处理的位置。由于罗马数字的规则是按照单位顺序排列的（个位、十位、百位等），所以我们可以通过适当地移动指针 p 来找到当前处理的单位对应的罗马数字字符。
 *
 * 移动指针： 在代码的逻辑中，每处理完一个数字位后，我们需要更新指针 p，使其指向下一个单位的起始位置。因为在字符串 rome 中，每个单位的罗马数字字符的数量都是固定的。
 *
 * 例如，个位对应的罗马数字字符是 "I"、"X"、"D"，"M"，每个字符之间都相隔了 7 个字符。所以，我们使用 p += 7; 来将指针 p 移动到下一个单位的起始位置。
 *
 * 循环处理： 在循环中，每处理完一个数字位后，我们都会移动指针 p 到下一个单位的起始位置，以便下一次处理下一个数字位。
 *
 * 总之，p += 7; 这行代码的作用是将指针 p 移动到下一个单位的起始位置，以便处理下一个数字位对 应的罗马数字字符。
 * 
 * Completed at @date: 2024-04-30 17:48
 */


public class _12_IntToRoman {
    public String intToRoman(int num) {
        String rome = "IIIVIIIXXXLXXXCCCDCCCMMM";
        String ret = "";
        int p = 0;
        while (num > 0) {
            int q = num % 10;
            if (q < 4)
                ret = rome.substring(p, p + q) + ret;
            else if (q == 4)
                ret = rome.substring(p + q - 2, p + q) + ret;
            else if (q < 9)
                ret = rome.substring(p + 3, p + q - 1) + ret;
            else
                ret = rome.substring(p + 6, p + q - 1) + ret;
            num /= 10;
//"I"、"X"、"D"，"M"，每个字符之间都相隔了 7 个字符。
            p += 7;
        }
        return ret;
    }

    public static void main(String[] args) {
        _12_IntToRoman solution = new _12_IntToRoman();
        int num = 123;
        System.out.println(solution.intToRoman(num)); // 输出转换后的罗马数字字符串
    }
}
